<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/7/19
 * Time: 12:01
 */

namespace Modules\Admin\Service;


use Illuminate\Support\Facades\DB;
use Modules\Admin\Entities\Module;

class ModuleService
{

    //获取最新模块数据
    public function getModules(){
        DB::table('modules')->truncate();
        //获取当前项目中已经存在的所有模块数据
        $modules = \HDModule::getModulesLists();
//        dd($modules);
        foreach ($modules as $v){
            Module::create([
                'name' => $v['name'],
                'title' => $v['title'],
                'is_home_access' => $this->is_home_access($v),
                ]);
        }

    }



     //定义某个模块是否可以在前台访问到,如果模块内有一个叫HomeController的类,并且有一个index方法,我就认为这个模块是可以被前台访问的,如果没有,就认为是不允许被前台访问
    public function is_home_access($v){
        //定义类名称
        $class = 'Modules\\'.$v['name'].'\Http\Controllers\HomeCroller';
        //判断$class这个类是否存在，并且判断$class类中的index方法是否存在，如果类和方法都存在，那么就代表可以在前台显示
        //class_exists() 检测类是否存在，里面传一个类名称
        //method_exists() 检测某个类中的方法是否存在，传两个参数，第一个参数是类名称，第二个参数是方法名称
        return class_exists($class) && method_exists($class,'index');
    }


    //设置默认模块
    public function setDefault($id){
        //首先将modules表中的所有模块的字段is_default 值设为0
        DB::table('modules')->update(['is_default' => 0]);

        //然后把需要设置为默认的模块的is_default 的值设为1
        $module = Module::find($id);
        $module->is_default = 1;
        $module->save();
    }


    //获取前台默认展示的模块
    public function getDefault(){
        //获取当前modules表中is_home_access等于1,并且is_default等于1的模块数据
        $module = Module::where([
            ['is_default',1],
            ['is_home_access',1]
        ])->first();
        //这个模块是可能找不到的,如果找到了,就直接返回,如果找不到,给一个默认让前台访问的模块
        $module = $module ? $module : Module::where('name','Goods')->first();
        return $module;
    }

}